<?php namespace My\Library;

class Upload extends \Phpcmf\Library\Upload
{
    protected $change_type;

    // 上级公共类
    public function __construct(...$params) {
        parent::__construct(...$params);
        // 例如设置某些文件扩展名的不允许上传
        $this->notallowed[] = ['php', 'asp', 'jsp', 'aspx', 'exe', 'sh', 'phtml'];
        //自动转为webp的文件格式
        $this->change_type = ['jpg', 'png', 'jpeg'];
    } /**
    * 上传文件
    */
   public function upload_file($config) {

       $file = isset($_FILES[$config['form_name']]) ? $_FILES[$config['form_name']] : null;

       if (!$file) {
           return dr_return_data(0, $this->error['ERROR_TMP_FILE_NOT_FOUND']);
       } else if (isset($file['error']) && $file['error']) {
           return dr_return_data(0, $this->_error_msg($file['error']));
       } else if (!file_exists($file['tmp_name'])) {
           return dr_return_data(0, $this->error['ERROR_TMP_FILE_NOT_FOUND']);
       } else if (!is_uploaded_file($file['tmp_name'])) {
           return dr_return_data(0, $this->error['ERROR_TMPFILE']);
       }

       $file_ext = $this->_file_ext($file['name']); // 扩展名
       $file_name = $this->_file_name($file['name']); // 文件实际名字


       // 安全验证
       $rt = $this->_safe_check($file_ext, $file["tmp_name"]);
       if (!$rt['code']) {
           return dr_return_data(0, $rt['msg']);
       }

       if (!$config['file_size']) {
           return dr_return_data(0, dr_lang('系统没有设置可上传的文件大小'));
       } elseif ($file['size'] > $config['file_size']) {
           // 文件大小限制
           return dr_return_data(0, $this->error['ERROR_SIZE_EXCEED']. ' '.($config['file_size']/1024/1024).'MB');
       } elseif ($config['file_exts'][0] != '*' && !in_array($file_ext, $config['file_exts'])) {
           // 检查是文件格式
           return dr_return_data(0, $this->error['ERROR_TYPE_NOT_ALLOWED'] . $file_ext);
       }
       //jpg,png文件自动转为webp格式
       if(in_array($file_ext,$this->change_type)){
            $file_ext ='webp';
            $file['name'] = $file_name.$file_ext;
       }
       // 保存目录名称
       list($file_path, $config, $diy) = $this->_rand_save_file_path($config, $file_ext, $file);

       // 开始上传存储文件
       $rt = $this->save_file('upload', $file["tmp_name"], $file_path, $config['attachment'], (int)$config['watermark']);
       if (!$rt['code']) {
           return dr_return_data(0, $rt['msg']);
       }

       if ($diy) {
           $url = '自定义存储地址不提供URL';
       } else {
           $url = $config['attachment']['url'].$file_path;
       }

       return dr_return_data(1, 'ok', [
           'ext' => $file_ext,
           'url' => $url,
           'md5' => $rt['data']['md5'],
           'file' => $file_path,
           'size' => isset($rt['data']['size']) && $rt['data']['size'] ? $rt['data']['size'] : $file['size'],
           'path' => ($config['attachment']['value']['path'] && $config['attachment']['value']['path'] != 'null' ? $config['attachment']['value']['path'] : '').$file_path,
           'name' => $file_name,
           'info' => $rt['data']['info'],
           'remote' => $config['attachment']['id'],
       ]);
   }


}